/**
 * 通知
 * @author nowind
 * @since 2017/9/27 14:10
 */

(function($){
    $.fn.extend({
        sysMsg: function(){
            $('<div class="sysMsg"><ul></ul></div>').appendTo('body').hide();
            $(".sysMsg").css({right: 0, top: $("#header").offsetHeight});
            $(this).bind("click", function(){
                if(!sysMsg.isShow) {
                    sysMsg.load(true);
                } else {
                    sysMsg.hide();
                }
            });
        }
    });
})(jQuery);

//页面调用
/*$(function(){
 $("#btnMsg").sysMsg();
 sysMsg.init();
 });*/

//通知处理类
var sysMsg = {
    staffId: 1025,                  //当前员工ID,需页面赋值
    msgUrl: "/msg/ajaxList.action", //获取最新通知的Url
    newClass: "btnSysMsg",          //有新通知时的文字样式
    $msgBtn: null,
    $msgBox: null,
    $msgBoxIn: null,
    msgNumber: 0,                   //新通知数量（从服务器获取）
    msgTimer: 280,                  //计时器读数
    msgInterval: 300,               //读取服务器新通知间隔（秒）
    intervalID: null,               //计时器ID
    isShow: false,                  //是否已展开通知列表面板
    //初始化
    init: function(){
        this.$msgBtn = $("#btnMsg");
        this.$msgBox = $(".sysMsg");
        this.$msgBoxIn = $(".sysMsg > ul");
        this.interval();    //开始计时
    },
    /**
     * 读取通知并提醒
     * 服务器返回格式如下:
     * { code:"1", "msg": "8",
        data:[
            {"content":"您有一条待面签的订单,订单尾号23170621098,请及时处理.", "url":"/order/detail.action?orderId=1", "rel": "w_order", "date": "09/27 17:06"},
            {"content":"您有一条待面签的订单,订单尾号23170621015,请及时处理.", "url":"/order/detail.action?orderId=8", "rel": "w_order", "date": "09/27 43:22"},
        ]};
     * @param isMT
     */
    load: function(isMT){   //是否手动点击查看
        this.$msgBoxIn.empty();
        $.ajax({type:"Post", url:sysMsg.msgUrl,
            data:{ staffId: sysMsg.staffId },
            dataType:"json",
            success:function(json) {
                if(json.code == "1") { sysMsg.exec(json, isMT); }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){ }
        });
    },
    exec: function(json, isMT){
        sysMsg.msgNumber = parseInt(json.msg);

        //没有新通知
        if(sysMsg.msgNumber == 0) {
            if(isMT) {
                sysMsg.$msgBoxIn.append('<span class="empty">暂时没有通知通知.</span>');
                sysMsg.showEmpty();
                sysMsg.resize();
            } else { sysMsg.hide(); }
            return;
        }

        //有新通知
        $.each(json.data, function(i){
            var msg = json.data[i];
            sysMsg.$msgBoxIn.append('<li><span class="text"><a target="navTab" rel="' + msg.rel + '" href="' + msg.url + '">' + msg.content + '</a></span><span class="date">' + msg.date + '</span></li>');
        });
        sysMsg.show();
        sysMsg.resize();
    },
    resize: function(){
        var height = this.$msgBox.height();
        var heightBase = document.documentElement.clientHeight - $("#header").outerHeight() - $("#footer").outerHeight() - 11;
        this.$msgBoxIn.css({"height": "auto"});
        if(height > heightBase) {
            this.$msgBoxIn.height(heightBase);
        }
    },
    //计时
    interval: function(){
        this.intervalID = setInterval(function(){
            sysMsg.msgTimer ++;
            if(sysMsg.msgTimer == sysMsg.msgInterval) {
                if(sysMsg.msgNumber > 0 && sysMsg.isShow){ //当前有通知,且展开面板状态,不读取服务器,减少服务器压力
                    sysMsg.clearTimer();
                    return;
                }
                sysMsg.load(false);
            }
        }, 1000);
    },
    //计时清零
    clearTimer: function(){
        sysMsg.msgTimer = 0;
    },
    //打开通知面板
    show: function(){
        this.$msgBtn.addClass(this.newClass);
        this.clearTimer();
        this.$msgBox.show();
        this.isShow = true;
    },
    //打开通知面板(没有通知)
    showEmpty: function(){
        this.$msgBtn.removeClass(this.newClass);
        this.clearTimer();
        this.$msgBox.show();
        this.isShow = true;
    },
    //隐藏通知面板
    hide: function(){
        this.$msgBtn.removeClass(this.newClass);
        this.clearTimer();
        this.$msgBox.hide();
        this.isShow = false;
    }
};
